package com.demo;

import com.serializeQueue.AbstractSerializableTask;
import com.serializeQueue.TaskQueue;
import com.serializeQueue.TaskQueueBuilder;
import com.serializeQueue.TaskRemoveFailedException;
import com.serializeQueue.impl.FileTaskSerializer;

public class Main {

    public static void main(String[] args) {

        //创建一个基于文件系统的持久化器
        FileTaskSerializer serializer = new FileTaskSerializer("C:\\Users\\dinglei\\Desktop\\tmp\\task");

        TaskQueue<TestTask> queue = TaskQueueBuilder.of(TestTask.class)

                .coreExecutor(2)    //任务处理线程数

                .exceptionHandler((task, e) -> System.out.println("任务出错:" + e.getMessage() + "   负载:" + task.payload))  //异常处理器

                .expiredTaskHandler(task -> {       //过期任务处理器
                    System.out.println("处理过期的任务:" + task.payload);
                    try {
                        serializer.remove(task.getId());//处理之后将任务移除
                    } catch (TaskRemoveFailedException e) {
                        System.out.println("任务移除失败时的逻辑");
                    }
                })

                .taskSerializer(serializer)    //任务持久化器

                .build();

        //提交一个不报错的任务
        queue.submit(new TestTask("该任务将会正常执行"));

        //提交一个将会报错任务
        queue.submit(new TestTask("该任务将报错") {
            @Override
            public void run() {
                throw new RuntimeException("这是报错信息");
            }
        });

    }


    private static class TestTask extends AbstractSerializableTask {

        private String payload;

        public TestTask(String payload) {
            this.payload = payload;
        }

        @Override
        public void run() {
            System.out.println(payload);
        }


    }


}
